package field

import (
	"yunj/pkg/yunj/core/builder/form"
)

// Markdown
// 完整配置详见cherry：https://github.com/Tencent/cherry-markdown/wiki/%E9%85%8D%E7%BD%AE%E9%A1%B9%E5%85%A8%E8%A7%A3
type Markdown struct {
	form.Field
	Height        any      `json:"height"`        // 高度。如：400、400px等都表示400px
	Toolbar       []string `json:"toolbar"`       // 顶部工具栏（仅屏幕宽度>768px生效）
	ToolbarRight  []string `json:"toolbarRight"`  // 顶部右侧工具栏（仅屏幕宽度>768px生效）
	MobileToolbar []any    `json:"mobileToolbar"` // 移动端顶部工具栏（仅屏幕宽度<=768px生效）
}

func NewMarkdown(id string, title ...string) *Markdown {
	f := &Markdown{}
	form.SetFieldInstance(&f.Field, f)
	f.SetFieldId(id)
	if len(title) > 0 {
		f.SetTitle(title[0])
	}
	return f
}

// 设置标题
func (f *Markdown) SetTitle(title string) *Markdown {
	f.Title = title
	return f
}

// 设置默认值
func (f *Markdown) SetDefault(def any) *Markdown {
	f.Default = def
	return f
}

// 设置描述
func (f *Markdown) SetDesc(desc string) *Markdown {
	f.Desc = desc
	return f
}

// 设置验证规则
func (f *Markdown) SetVerify(rule string) *Markdown {
	f.Verify = rule
	return f
}

// 设置验证标题
func (f *Markdown) SetVerifyTitle(verifyTitle string) *Markdown {
	f.VerifyTitle = verifyTitle
	return f
}

// 增加验证规则
func (f *Markdown) AddVerify(rule string) *Markdown {
	f.AddFieldVerify(rule)
	return f
}

// 设置是否只读
func (f *Markdown) SetReadonly(yes bool) *Markdown {
	f.Readonly = yes
	return f
}

// 设置栅格布局
// 超小屏幕(手机<768px)、小屏幕(平板≥768px)、中等屏幕(桌面≥992px)、大型屏幕(桌面≥1200px)、超大屏幕(桌面≥1400px)
// 总列数：12
func (f *Markdown) SetGrid(num ...any) *Markdown {
	f.Grid = num
	return f
}

// 设置权限
func (f *Markdown) SetAuth(auth string) *Markdown {
	f.Auth = auth
	return f
}

// 设置容器高度
func (f *Markdown) SetHeight(height any) *Markdown {
	f.Height = height
	return f
}

// 设置工具栏
// 仅屏幕宽度>768px生效
func (f *Markdown) SetToolbar(toolbar []string) *Markdown {
	f.Toolbar = toolbar
	return f
}

// 设置顶部右侧工具栏
// 仅屏幕宽度>768px生效
func (f *Markdown) SetToolbarRight(toolbarRight []string) *Markdown {
	f.ToolbarRight = toolbarRight
	return f
}

// 设置移动端顶部工具栏
// 仅屏幕宽度<=768px生效
func (f *Markdown) SetMobileToolbar(mobileToolbar []any) *Markdown {
	f.MobileToolbar = mobileToolbar
	return f
}

// 处理属性
func (f *Markdown) HandleAttr() error {
	if f.Height == nil {
		f.Height = "auto"
	}
	if f.Toolbar == nil {
		f.Toolbar = []string{
			"undo", "redo", "|",
			"bold", "italic", "underline", "strikethrough", "color", "size", "|",
			"header", "list", "hr", "panel", "|",
			"image", "link", "code", "table", "|", "togglePreview",
		}
	}
	if f.ToolbarRight == nil {
		f.ToolbarRight = []string{"export", "theme", "copy"}
	}
	if f.MobileToolbar == nil {
		f.MobileToolbar = []any{
			"undo",
			map[string][]string{"bold": {"bold", "italic", "underline", "strikethrough", "color", "size"}},
			"header",
			map[string][]string{"insert": {"list", "hr", "panel", "image", "link", "code", "table"}},
			"togglePreview",
		}
	}
	return nil
}
